//#include <iostream>
//#include <cstring>
//
//using namespace std;
//
//const int N = 3010, INF = 0x3f3f3f3f;
//
//int n, t, m = N;
//bool st[N];
//int a[N], sz;
//int dist[N];
//
//int gcd(int a, int b)
//{
//	return b == 0 ? a : gcd(b, a % b);
//}
//
//void circle()
//{
//	memset(dist, 0x3f, sizeof dist);
//	dist[0] = 0;
//	
//	for(int i = 1; i <= sz; i++)
//	{
//		if(a[i] == m) continue;
//		int d = gcd(a[i], m);
//		for(int j = 0; j < d; j++)
//		{
//			for(int x = j, c = 0; c < 2; c += (x == j))
//			{
//				int y = (x + a[i]) % m;
//				dist[y] = min(dist[y], dist[x] + a[i]);
//				x = y;
//			}
//		}
//	}
//}
//
//int main()
//{
//	cin >> n >> t;
//	for(int i = 1; i <= n; i++)
//	{
//		int x; cin >> x;
//		for(int j = x; j >= max(1, x - t); j--)
//		{
//			if(st[j]) continue;
//			a[++sz] = j;
//			st[j] = true;
//			
//			m = min(m, j);	
//		}
//	}
//	
//	if(m == 1)
//	{
//		cout << -1 << endl;
//		return 0;
//	}
//
//	circle();
//		
//	int ret = 0;
//	for(int i = 1; i < m; i++)
//	{
//		if(dist[i] == INF)
//		{
//			cout << -1 << endl;
//			return 0;
//		}
//		
//		ret = max(ret, dist[i] - m);
//	}
//	
//	cout << ret << endl;
//
//	return 0;
//} 







